<template>
  <div class="import">
    <!-- 导入excel的组件 -->
    <upload-excel :beforeUpload="beforeUpload" :onSuccess="handleSuccess" />
  </div>
</template>

<script>
// 导入接口
import { batchAddEmp } from '@/api/employees'
// 导入工具
import { formatDate } from '@/filters/filters'
export default {
  methods: {
    // 是在正式上传以前调用的钩子
    // 里面可以做一些判断决定是否要继续上传
    // 如果本方法里return true才会往下执行代码帮你读取出文件内容(会调用onSuccess)
    // 如果return false就不会往下执行（不会调用onSuccess）
    beforeUpload(file) {
      // 我们来判断文件类型
      if (/\.(xlsx|xls)$/.test(file.name)) {
        return true
      }

      // 能来到这证明不是这个文件类型
      this.$message.error('请选择xlsx和xls文件')
      return false
    },

    // 在读完内容后调用的钩子
    // results: 读取到的内容
    // header： 读取到的excel里的表头（第一行）
    async handleSuccess({ results, header }) {
      
      // 因为results的key是中文的，所以做一个转换
      const userRelations = {
        入职日期: 'timeOfEntry',
        手机号: 'mobile',
        姓名: 'username',
        转正日期: 'correctionTime',
        工号: 'workNumber',
        聘用形式: 'formOfEmployment'
      }

      // 使用map方法根据旧数组产生一个长度一样的新数组
      const newList = results.map( v => {

          // 需要对每一项进行转换，变成一个新的对象，新的对象的key必须是英文的
          // 先准备一个对象
          const obj = {}
          // 遍历中文key的对象,是为了每一个属性
          for (const key in v) {
              // 比如key叫入职日期,userRelations['入职日期']就可以得到对应的英文key
              // 但是又不能写死`入职日期`就传key，这样就得到英文key
              const enKey = userRelations[key]
              if (key == '入职日期' || key == '转正日期') {
                // 先取出excel时间的天数
                const excelTime = v[key]
                // 算出毫秒数：(天数-1) * 24 * 60 * 60 * 1000
                const date = new Date( (excelTime - 1) * 24 * 60 * 60 * 1000 )
                // 再获取这个时间的年份
                const year = date.getFullYear()
                // 再减去70年
                date.setFullYear( year - 70 )
                // 把算好的时间交给新的对象对应的英文key
                // 要处理yyyy-mm-dd的格式
                obj[enKey] = formatDate(date)
              }else {
                // 再把英文key加到新的对象，并使用旧对象里对应的属性值
                obj[enKey] = v[key]
              }
          }
          // 循环完了就意味着所有的属性都转换完了,就return这个英文key的新对象
          return obj
      } )

      // 批量添加员工
      if (this.$route.query.type === 'employees') {
        let res = await batchAddEmp(newList)
      }

      // 反正不管什么接口都是导入成功
      this.$message.success('批量导入成功')
      // 导入成功跳转回去,从哪来回哪去
      this.$router.back()
    }
  }
}
</script>

<style>
</style>